home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / DOMAIN.H < prev    next >
Text File  |  1993-08-09  |  7KB  |  249 lines

  1. #ifndef    _DOMAIN_H
  2. #define    _DOMAIN_H
  3.  
  4. #ifndef _TIME_H
  5. #include <time.h>
  6. #endif
  7.  
  8. #ifndef    _GLOBAL_H
  9. #include "global.h"
  10. #endif
  11.  
  12. #ifndef    _MBUF_H
  13. #include "mbuf.h"
  14. #endif
  15.  
  16. #ifndef _PROC_H
  17. #include "proc.h"
  18. #endif
  19.  
  20. #define    MAXCNAME    10    /* Maximum amount of cname recursion */
  21.  
  22. #define    NRLIST    17
  23.  
  24. #define    TYPE_A        1    /* Host address */
  25. #define    TYPE_NS        2    /* Name server */
  26. #define    TYPE_MD        3    /* Mail destination (obsolete) */
  27. #define    TYPE_MF        4    /* Mail forwarder (obsolete) */
  28. #define    TYPE_CNAME    5    /* Canonical name */
  29. #define    TYPE_SOA    6    /* Start of Authority */
  30. #define    TYPE_MB        7    /* Mailbox name (experimental) */
  31. #define    TYPE_MG        8    /* Mail group member (experimental) */
  32. #define    TYPE_MR        9    /* Mail rename name (experimental) */
  33. #define    TYPE_NULL    10    /* Null (experimental) */
  34. #define    TYPE_WKS    11    /* Well-known sockets */
  35. #define    TYPE_PTR    12    /* Pointer record */
  36. #define    TYPE_HINFO    13    /* Host information */
  37. #define    TYPE_MINFO    14    /* Mailbox info */
  38. #define    TYPE_MX        15    /* Mail exchanger */
  39. #define    TYPE_TXT    16    /* Text strings */
  40. #define    TYPE_AXFR    252    /* Transfer zone of authority */
  41. #define    TYPE_MAILB    253    /* Transfer mailbox records */
  42. #define    TYPE_MAILA    254    /* Transfer mail agent records */
  43. #define    TYPE_ANY    255    /* wildcard match */
  44.  
  45. #define    CLASS_IN    1    /* The ARPA Internet */
  46. #define    CLASS_CH    3    /* The CHAOS net at MIT*/
  47. #define    CLASS_ANY    255    /* wildcard match */
  48.  
  49. struct dserver {
  50.     struct dserver *next;
  51.     int32 address;            /* IP address of server */
  52.     int32 timeout;            /* Current timeout, ticks */
  53.     int32 srtt;                /* Smoothed round trip time, ticks */
  54.     int32 mdev;                /* Mean deviation, ticks */
  55.     int32 queries;            /* Query packets send to this server */
  56.     int32 responses;        /* Response packets received from this server */
  57.     int32 missers;            /* Timeout hits */
  58. };
  59. #define    NULLDOM    (struct dserver *)0
  60.  
  61. #define    AGAIN        8    /* Average RTT gain = 1/8 */
  62. #define    LAGAIN        3    /* Log2(AGAIN) */
  63. #define    DGAIN        4    /* Mean deviation gain = 1/4 */
  64. #define    LDGAIN        2    /* log2(DGAIN) */
  65.  
  66. #define    DOM_RESPONSE    0x8000
  67. #define    DOM_AUTHORITY    0x0400
  68. #define    DOM_TRUNC        0x0200
  69. #define    DOM_DORECURSE    0x0100
  70. #define    DOM_CANRECURSE    0x0080
  71.  
  72. /* Header for all domain messages */
  73. struct dhdr {
  74.     int16 id;                /* Identification */
  75.     char qr;                /* Query/Response */
  76. #define    RESPONSE        1
  77.     char opcode;
  78. #define    QUERY            0
  79. #define    IQUERY            1
  80. #define    DSTATUS            2
  81. #define    ZONEINIT        14
  82. #define    ZONEREF            15
  83.     char aa;                /* Authoratative answer */
  84.     char tc;                /* Truncation */
  85.     char rd;                /* Recursion desired */
  86.     char ra;                /* Recursion available */
  87.     char rcode;                /* Response code */
  88. #define    NO_ERROR        0
  89. #define    FORMAT_ERROR    1
  90. #define    SERVER_FAIL        2
  91. #define    NAME_ERROR        3
  92. #define    NOT_IMPL        4
  93. #define    REFUSED            5
  94.     int16 qdcount;            /* Question count */
  95.     int16 ancount;            /* Answer count */
  96.     int16 nscount;            /* Authority (name server) count */
  97.     int16 arcount;            /* Additional record count */
  98.     struct quest **qlist;    /* List of questions */
  99.     struct rr **ans;        /* List of answers */
  100.     struct rr **ns;            /* List of name servers */
  101.     struct rr **add;        /* List of additional records */
  102. };
  103. struct quest {
  104.     char *qname;            /* Domain name being sought */
  105.     int16 qtype;            /* Type (A, MX, etc) */
  106.     int16 qclass;            /* Class (IN, etc) */
  107. };
  108. #define    NULLDHDR (struct dhdr *)0
  109.  
  110. /* header for resouce records (rr's) */
  111. struct mx {
  112.     int16 pref;
  113.     char *exch;
  114. };
  115.  
  116. struct hinfo {
  117.     char *cpu;
  118.     char *os;
  119. };
  120.  
  121. struct minfo {
  122.     char *rmailbx;
  123.     char *emailbx;
  124. };
  125.  
  126. struct wks {
  127.     int32 addr;
  128.     unsigned char protocol;
  129.     unsigned char bitmap[64];
  130. };
  131.  
  132. struct soa {
  133.     char *mname;
  134.     char *rname;
  135.     int32 serial;
  136.     int32 refresh;
  137.     int32 retry;
  138.     int32 expire;
  139.     int32 minimum;
  140. };
  141.  
  142. struct rr {
  143.     struct rr *next;        /* linked list pointer */
  144.     struct rr *soarec;        /* pointer to owning SOA*/
  145.     char *name;                /* Domain name, ascii form */
  146.     char *origin;
  147.     int16 type;                /* A, MX, etc */
  148.     int16 class;            /* IN, etc */
  149.     int32 ttl;                /* Time-to-live */
  150.     int16 rdlength;            /* Length of data field */
  151.     union {
  152.         int32 addr;            /* Used for type == A */
  153.         struct soa *soa;    /* Used for type == SOA */
  154.         struct mx mx;        /* Used for type == MX */
  155.         struct hinfo hinfo;    /* Used for type == HINFO */
  156.         struct minfo minfo;    /* Used for type == MINFO */
  157.         struct wks *wks;    /* Used for type == WKS */
  158.         char *name;            /* for domain names */
  159.         char *data;            /* for anything else */
  160.     } rdata;
  161. };
  162. #define    NULLRR    (struct rr *)0
  163.  
  164. struct rr_memory{
  165.     char Dname[127];        /* Remember previous records name */
  166.     int32 Dttl;                /* Remember previous records ttl */
  167.     int Dclass;                /* Remember previous records class */
  168.     char *dorigin;            /* Remember previous $origin name */
  169.     struct rr *rrp;            /* For next memory rr record in dfind */
  170. };
  171.  
  172. struct dlist{
  173.     char *name;
  174.     struct dlist *next;
  175. };
  176. #define    NULLDLIST (struct dlist *)0
  177.  
  178. typedef enum {
  179.     Found,
  180.     Missing
  181. } Ctype;
  182.  
  183. typedef enum {
  184.     Address,
  185.     Name
  186. } Rtype;
  187.  
  188. typedef enum {
  189.     Unknown,
  190.     Bad,
  191.     Suspect,
  192.     Good,
  193.     Activep,
  194.     Waiting
  195. } Apstate;
  196.  
  197. typedef struct {
  198.    Ctype type;
  199.    Apstate state;
  200.    Apstate proc_run;
  201.    time_t ti;
  202.    char name[40];
  203.    int32 address;
  204.    struct timer timer;
  205. } Cache;
  206.  
  207. extern Cache *cache;
  208.  
  209. #define NDTYPES 17
  210.  
  211. extern char *Dsuffix, *Dorigin;
  212. extern int SDom, DBloaded, Db_initialize, Dstypes[], Dhaveaa, Cwrite, DTranslate, DVerbose;
  213. extern int16 Dcache_size, Dtimeout, Dretries;
  214. extern struct dserver *Dlist;
  215. extern struct dlist *Lorigin;
  216. extern struct rr *Rrlist[], *Rrlistl[];
  217.  
  218. int32 resolve __ARGS((char *name));
  219. struct rr *resolve_rr __ARGS((char *dname,int16 dtype));
  220. char *resolve_a __ARGS((int32 ip_address, int shorten));
  221. char *resolve_mailb __ARGS((char *name));
  222.  
  223. /* in domserv.c */
  224. void proc_query __ARGS((int s,void *d,void *b));
  225.  
  226. /* in domcli.c */
  227. int docachereset __ARGS((int argc,char **argv,void *p));
  228. int docachegarb __ARGS((int argc,char **argv,void *p));
  229. int docachelist __ARGS((int argc,char **argv,void *p));
  230. /* in domsubr.c */
  231. int isaddr __ARGS((char *s));
  232. struct dhdr *bld_dhdr __ARGS((int16 qr,int16 op,int16 flags,int16 rcode, char *name,int class,int type));
  233. int ntohdomain __ARGS((struct dhdr *dhdr,struct mbuf **bbp));
  234. void free_dhdr __ARGS((struct dhdr *dp));
  235. int res_mkbuf __ARGS((struct dhdr *dp,char *buffer,int16 len));
  236. struct rr *get_rr __ARGS((FILE *fp,struct rr_memory *memory));
  237. int add_rr __ARGS((FILE *fp,struct rr *rrp1));
  238. struct rr *copy_rr __ARGS((struct rr *rr));
  239. struct rr * make_rr __ARGS((int source,char *dname,int16 dclass,int16 dtype,int32 ttl,int16 rdl,void *data));
  240. int cmp_rr __ARGS((struct rr *rr1,struct rr *rr2));
  241. void free_rr __ARGS((struct rr *rrp));
  242. void put_rr __ARGS((FILE *fp,struct rr *rrp,int addorg));   /* DB3FL */
  243. char *type2str __ARGS((int type));
  244. struct rr *dfind __ARGS((FILE *dbase,char *name,int type,struct rr_memory *memory));
  245. void proc_answer __ARGS((struct dhdr *dhdr,struct dserver *dp, FILE *dfp));
  246. int sendquery __ARGS((int32 address,char *buf,int len,struct mbuf **bp,int32 timeout));
  247.  
  248. #endif    /* _DOMAIN_H */
  249.